package com.example.sulingorder.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.sulingorder.entity.OrderEarthEntity;
import com.example.sulingorder.entity.OrderEntity;
import com.example.sulingorder.vo.HelpFormDataVo;
import com.example.sulingorder.vo.ReleaseOrderInfoVo;
import com.example.sulingorder.vo.ReleaseOrderVo;
import com.xiao.sulingpublic.utils.PageUtils;
import com.xiao.sulingpublic.utils.R;

import java.util.Map;
import java.util.concurrent.ExecutionException;

/**
 * 创建商品表
 *
 * @author wen
 * @email 1322127758@qq.com
 * @date 2022-03-11 14:25:53
 */
public interface OrderService extends IService<OrderEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 处理 用户发布的帮领 订单
     * @param releaseOrderVo :提交的数据
     * @return :返回订单token, 该token为订单数据在redis中的key
     */
    String saveOrder(ReleaseOrderVo releaseOrderVo, ReleaseOrderInfoVo releaseOrderInfoVo, OrderEarthEntity orderEarthEntity, String formCode) throws Exception;

    R saveHelpBuyOrder(HelpFormDataVo helpFormDataVo) throws Exception;

    R getOrderList(String username) throws ExecutionException, InterruptedException;

    /**
     * 作用: 用户领取订单
     * @param orderSn: 要领取的订单号
     * @param orMemberId:发布订单的用户号
     * @param username:领取人的用户号
     */
    R upDataReceiveOrder(String orderSn, String orMemberId, String username, String formCode);

    /**
     * 获取用户领取的订单信息, 获取用户领取的全部订单数据, 可查全部,可查指定订单
     * @param orderSn:  要获取的订单号数据
     * @param username: 要查询哪个用户的订单
     * @param sendUsername: 发布订单的用户号 不一定存在, 存在就是查询指定订单
     * @param orOrderState: 要查询的订单状态, 不一定存在, 存在就是查询指定状态
     */
    R getReceiveOrderData(String orderSn, String username, String sendUsername, Integer orOrderState) throws ExecutionException, InterruptedException;

    /**
     * 获取订单数据,每次获取10个数据, 对应的订单详细信息
     * @param username :获取用户发布的订单数据
     * @param state :获取的订单类型
     * @param size  :当前数据起点
     * @return :订单数据
     */
    R getOrderListPagi(String username, Integer state, Integer size) throws ExecutionException, InterruptedException;

    /**
     * 发布者 确认收货, 扫码后发送数据过来
     * @param memberId :发布者号
     * @param userName :领取者号
     * @param orderSn  :要收货的订单号
     * @param code     :生成二维码时的code
     * @return :返回状态
     */
    R haveReceipt(String memberId, String userName, String orderSn, String code) throws Exception;
}

